Search K
Appearance
Appearance
version: "3"
services:
registry:
image: registry:2 # 使用官方 Registry 镜像
container_name: my-registry # 容器名称
restart: always
ports:
- "5000:5000" # 将本地端口 5000 映射到容器端口 5000
volumes:
- ./data:/var/lib/registry # 持久化存储 Registry 数据
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt # 使用自签名证书
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_COMPATIBILITY_SCHEMA1_MANIFESTS: "true" # 允许使用 v1 镜像格式
# 如果需要使用基本身份验证,创建一个名为 auth 的目录,然后在其中运行以下命令生成 htpasswd 文件
# docker run --entrypoint htpasswd registry:2 -Bbn YOUR_USERNAME YOUR_PASSWORD > auth/htpasswd
# # REGISTRY_AUTH: htpasswd
# REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
# REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm# 创建持久化存储卷
❯ docker volume create my-registry-data
# 启动Registry容器
❯ docker run -d -p 5000:5000 \
--name my-registry \
-v my-registry-data:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-e REGISTRY_COMPATIBILITY_SCHEMA1_MANIFESTS=true \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
--restart=always \
registry:2
# 如果启用了基本身份验证,创建一个名为 auth 的目录,并在其中运行以下命令生成 htpasswd 文件
# docker run --entrypoint htpasswd registry:2 -Bbn YOUR_USERNAME YOUR_PASSWORD > auth/htpasswdecho '{ "insecure-registries": ["<私有仓库地址ip>:5000"] }' | sudo tee /etc/docker/daemon.json
sudo service docker restart如果私有仓库使用自签名证书,你需要将证书添加到 Docker 的信任存储中。
# 将证书复制到 /etc/docker/certs.d/<私有仓库地址>/ 目录中
sudo mkdir -p /etc/docker/certs.d/<私有仓库地址>/
sudo cp <.../证书.crt> /etc/docker/certs.d/<私有仓库地址>/.crt
# 重新启动 Docker
sudo service docker restart❯ docker pull <私有仓库地址>/<镜像名>:<标签>为镜像打标签。
❯ docker tag my-image registry.example.com/my-repo/my-image:v1.0
# docker image tag ubuntu localhost:5000/myfirstimage登录到私有仓库
❯ docker login registry.example.com推送镜像到私有仓库
❯ docker push registry.example.com/my-repo/my-image:v1.0
# or
❯ docker push <私有仓库地址 ip>:5000/my-repo/my-image:v1.0
# docker push localhost:5000/myfirstimage# 登录
docker login <私有仓库地址>
# 从私有仓库拉取镜像
docker pull <私有仓库地址>/<路径>/<镜像名>:<标签>
# docker pull localhost:5000/myfirstimage例如,如果私有仓库地址为 registry.example.com,路径为 /my-repo,镜像名为 my-image,标签为 v1.0
docker pull registry.example.com/my-repo/my-image:v1.0